const Koa = require('koa')
const KoaRouter = require('@koa/router')
const fs = require('fs')

// 创建实例
const app = new Koa()
const route = new KoaRouter()

// 启动服务、路由中间件挂载app  
app.use(route.routes()).listen(8000, () => console.log('ok'))


/**
 * 数据的响应
 *      在 koa 中 通过 ctx.body 进行返回数据、所以body将数据响应主体设置为：
 *          string数据、buffer数据、stream流数据、对象/数组、null
 *          
 */


/**
 * String 字符串类型
 *      请求路径：http://127.0.0.1:8000/string
 */
route.get('/string', (ctx, next) => {

    // 响应数据
    ctx.body = "响应String类型数据"
})



/**
 * Buffer 十六进制数据类型
 *      请求路径：http://127.0.0.1:8000/buffer
 */
route.post('/buffer', (ctx, next) => {
    const buf = new Buffer.from('响应 Buffer 类型数据')
    // 响应数据
    ctx.body = buf
})




/**
 * 响应流数据
 *      请求路径：http://127.0.0.1:8000/read
 */
route.post('/read', (ctx, next) => {

    const read = fs.createReadStream(__dirname + '/image/1744175158558_12.jpg')
    // 在响应流数据时，如果不指定类型，客户端就会显示乱码，因为客户端不知道这是什么格式数据，
    ctx.type = 'image/jpg'
    // 响应数据
    ctx.body = read
})




/**
 * 响应 Object、Array数据类型
 *      请求路径：http://127.0.0.1:8000/object
 */
route.get('/object', (ctx, next) => {
    // 响应数据
    ctx.body = {
        code: 200,
        data: [
            { name: '张三', age: 20 },
            { name: '李四', age: 30 },
            { name: '韩梅梅', age: 16 },
            { name: '李雷', age: 17 },
        ]
    }
})